diff --git a/drivers/tee/Kconfig b/drivers/tee/Kconfig
index 5c0c890..5ca5a08 100644
--- a/drivers/tee/Kconfig
+++ b/drivers/tee/Kconfig
@@ -29,6 +29,7 @@
 	  "avb" commands.
 
 source "drivers/tee/optee/Kconfig"
+source "drivers/tee/broadcom/Kconfig"
 
 endmenu
 
diff --git a/drivers/tee/Makefile b/drivers/tee/Makefile
index f72c68c..5c8ffdb 100644
--- a/drivers/tee/Makefile
+++ b/drivers/tee/Makefile
@@ -3,3 +3,4 @@
 obj-y += tee-uclass.o
 obj-$(CONFIG_SANDBOX) += sandbox.o
 obj-$(CONFIG_OPTEE) += optee/
+obj-y += broadcom/
diff --git a/drivers/tee/broadcom/Kconfig b/drivers/tee/broadcom/Kconfig
new file mode 100644
index 0000000..ce95072
--- /dev/null
+++ b/drivers/tee/broadcom/Kconfig
@@ -0,0 +1,7 @@
+config CHIMP_OPTEE
+	bool "Enable secure ChiMP firmware loading"
+	depends on OPTEE
+	default y
+	help
+	  This driver is used to load bnxt firmware binary using OpTEE.
+	  bnxt is Broadcom NetXtreme controller Ethernet card.
diff --git a/drivers/tee/broadcom/Makefile b/drivers/tee/broadcom/Makefile
new file mode 100644
index 0000000..cb3cef1
--- /dev/null
+++ b/drivers/tee/broadcom/Makefile
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0+
+
+obj-y += chimp_optee.o
diff --git a/drivers/tee/broadcom/chimp_optee.c b/drivers/tee/broadcom/chimp_optee.c
new file mode 100644
index 0000000..37f9b09
--- /dev/null
+++ b/drivers/tee/broadcom/chimp_optee.c
@@ -0,0 +1,183 @@
+// SPDX-License-Identifier: BSD-2-Clause
+/*
+ * Copyright 2020 Broadcom.
+ */
+
+#include <common.h>
+#include <tee.h>
+#include <broadcom/chimp.h>
+
+#ifdef CONFIG_CHIMP_OPTEE
+
+#define CHMIP_BOOT_UUID { 0x6272636D, 0x2019, 0x0716, \
+		   { 0x42, 0x43, 0x4D, 0x5F, 0x53, 0x43, 0x48, 0x49 } }
+
+enum {
+	TEE_CHIMP_FASTBOOT = 0,
+	TEE_CHIMP_HEALTH_STATUS,
+	TEE_CHIMP_HANDSHAKE_STATUS,
+} tee_chmip_cmd;
+
+struct bcm_chimp_data {
+	struct udevice *tee;
+	u32 session;
+} chimp_data;
+
+static int get_open_session(struct bcm_chimp_data *b_data)
+{
+	const struct tee_optee_ta_uuid uuid = CHMIP_BOOT_UUID;
+	struct tee_open_session_arg arg;
+	struct udevice *tee = NULL;
+	int rc;
+
+	tee = tee_find_device(NULL, NULL, NULL, NULL);
+	if (!tee)
+		return -ENODEV;
+
+	memset(&arg, 0, sizeof(arg));
+	tee_optee_ta_uuid_to_octets(arg.uuid, &uuid);
+	rc = tee_open_session(tee, &arg, 0, NULL);
+	if (rc < 0)
+		return -ENODEV;
+
+	b_data->tee = tee;
+	b_data->session = arg.session;
+
+	return 0;
+}
+
+static int init_arg(struct tee_invoke_arg *arg, u32 func)
+{
+	if (get_open_session(&chimp_data))
+		return -EINVAL;
+
+	memset(arg, 0, sizeof(struct tee_invoke_arg));
+	arg->func = func;
+	arg->session = chimp_data.session;
+
+	return 0;
+}
+
+int chimp_handshake_status_optee(u32 timeout, u32 *hs)
+{
+	struct tee_invoke_arg arg;
+	struct tee_param param[1];
+	int ret;
+
+	ret = init_arg(&arg, TEE_CHIMP_HANDSHAKE_STATUS);
+	if (ret < 0)
+		return ret;
+
+	param[0].attr = TEE_PARAM_ATTR_TYPE_VALUE_INOUT;
+	param[0].u.value.a = timeout;
+
+	ret = tee_invoke_func(chimp_data.tee, &arg, ARRAY_SIZE(param), param);
+	if (ret < 0) {
+		printf("Handshake status command failed\n");
+		goto out;
+	}
+
+	switch (arg.ret) {
+	case TEE_SUCCESS:
+		*hs = param[0].u.value.a;
+		ret =  0;
+		break;
+	default:
+		ret = -EINVAL;
+		break;
+	}
+
+out:
+	tee_close_session(chimp_data.tee, chimp_data.session);
+	chimp_data.tee = NULL;
+
+	return ret;
+}
+
+int chimp_health_status_optee(u32 *health)
+{
+	struct tee_invoke_arg arg;
+	struct tee_param param[1];
+	int ret;
+
+	ret = init_arg(&arg, TEE_CHIMP_HEALTH_STATUS);
+	if (ret < 0)
+		return ret;
+
+	param[0].attr = TEE_PARAM_ATTR_TYPE_VALUE_OUTPUT;
+
+	ret = tee_invoke_func(chimp_data.tee, &arg, ARRAY_SIZE(param), param);
+	if (ret < 0) {
+		printf("Helath status command failed\n");
+		goto out;
+	}
+
+	switch (arg.ret) {
+	case TEE_SUCCESS:
+		*health = param[0].u.value.a;
+		ret =  0;
+		break;
+	default:
+		ret = -EINVAL;
+		break;
+	}
+
+out:
+	tee_close_session(chimp_data.tee, chimp_data.session);
+	chimp_data.tee = NULL;
+
+	return ret;
+}
+
+int chimp_fastboot_optee(void)
+{
+	struct tee_invoke_arg arg;
+	int ret;
+
+	ret = init_arg(&arg, TEE_CHIMP_FASTBOOT);
+	if (ret < 0)
+		return ret;
+
+	ret = tee_invoke_func(chimp_data.tee, &arg, 0, NULL);
+	if (ret < 0) {
+		printf("Chimp boot_fail\n");
+		goto out;
+	}
+
+	switch (arg.ret) {
+	case TEE_SUCCESS:
+		ret = 0;
+		break;
+	default:
+		ret = -EINVAL;
+		break;
+	}
+
+out:
+	tee_close_session(chimp_data.tee, chimp_data.session);
+	chimp_data.tee = NULL;
+
+	return ret;
+}
+#else
+int chimp_handshake_status_optee(u32 timeout, u32 *status)
+{
+	printf("ChiMP handshake status fail (OPTEE not enabled)\n");
+
+	return -EINVAL;
+}
+
+int chimp_health_status_optee(u32 *status)
+{
+	printf("ChiMP health status fail (OPTEE not enabled)\n");
+
+	return -EINVAL;
+}
+
+int chimp_fastboot_optee(void)
+{
+	printf("ChiMP secure boot fail (OPTEE not enabled)\n");
+
+	return -EINVAL;
+}
+#endif /* CONFIG_CHIMP_OPTEE */
diff --git a/include/broadcom/chimp.h b/include/broadcom/chimp.h
new file mode 100644
index 0000000..7f64152
--- /dev/null
+++ b/include/broadcom/chimp.h
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright 2020 Broadcom.
+ *
+ */
+
+#ifndef __CHIMP_H__
+#define __CHIMP_H__
+
+#include <linux/compiler.h>
+
+/**
+ * chimp_fastboot_optee() - api to load bnxt firmware
+ *
+ * @return: 0 on success and -ve on failure
+ */
+int chimp_fastboot_optee(void);
+
+/**
+ * chimp_health_status_optee() - get chimp health status
+ *
+ * Chimp health status could be firmware is in good condition or
+ * bad condition because of crash/hang.
+ *
+ * @status: pointer to get chimp health status
+ *
+ * @return: 0 on success and -ve on failure
+ */
+int chimp_health_status_optee(u32 *status);
+
+/**
+ * chimp_handshake_status_optee() - get chimp handshake status.
+ *
+ * To know firmware is loaded and running.
+ *
+ * @timeout: timeout value, if 0 then default timeout is considered by op-tee
+ * @hstatus: pointer to chimp handshake status
+ *
+ * @return: 0 on success and -ve on failure
+ */
+int chimp_handshake_status_optee(u32 timeout, u32 *hstatus);
+
+#endif
